package com.yungu.swift.lbs.trace.google;

import com.yungu.swift.utils.JsonUtils;
import com.yungu.swift.utils.StringUtils;
import org.apache.http.HttpStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 谷歌地图Directions接口工具类
 *
 * @author Zerrion
 * @date 2018/1/19
 */
public class GoogleGeocodeUtils {

    private static final Logger logger = LoggerFactory.getLogger(GoogleGeocodeUtils.class);
    private static final String GOOGLE_MAPS_GEOCODE_URL = "https://maps.googleapis.com/maps/api/geocode/json?language=en";
    private static final String ZTE_GOOGLE_MAPS_GEOCODE_API_KEY = "AIzaSyB9YiCUTJbITvys2htM7dpzXdsCnTTbFdM";

    /**
     * 通过经纬度反向解析地址
     *
     * @param lat 地点纬度
     * @param lng 地点经度
     * @return BigDecimal
     * @author Zerrion
     * @date 2018/3/20
     */
    public static String getFormattedAddress(String lat, String lng) {
        String result = invokeGoogleAPI(lat, lng);
        if (StringUtils.isEmpty(result)) {
            return null;
        }
        try {
            Map map = JsonUtils.readValue(result, Map.class);
            if ("OK".equals(map.get("status"))) {
                List results = (List) map.get("results");
                if (results.size() > 0) {
                    return (String) ((Map) results.get(0)).get("formatted_address");
                } else {
                    logger.error("Google API Geocode - getMinute - ZERO_RESULTS");
                    return null;
                }
            } else {
                logger.error("Google API Geocode - getMinute - 参数错误");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 调用谷歌API方法
     *
     * @param lat 地点纬度
     * @param lng 地点经度
     * @return String
     * @author Zerrion
     * @date 2018/3/20
     */
    private static String invokeGoogleAPI(String lat, String lng) {
        String url = GOOGLE_MAPS_GEOCODE_URL + "&latlng=" + lat + "," + lng;
        Map<String, Object> resultMap = GoogleRequestUtils.get(url, ZTE_GOOGLE_MAPS_GEOCODE_API_KEY);
        Integer status = (Integer) resultMap.get("status");
        String result = (String) resultMap.get("result");
        if (HttpStatus.SC_OK == status) {
            return result;
        } else {
            logger.error("请求谷歌Geocode接口-超时");
            return null;
        }
    }

}
